package com.mouse.remind;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;



public class JsonParse {
	private static final String TAG = "JsonParse";
	
	/**
	 * 解析json串为一个Map
	 * @param json
	 * @return
	 */
	public static MapBean parseToObjMap(String json){
		MapBean mapBean = null;
		JSONObject obj;
		try {
			obj = new JSONObject(json);
			mapBean = parseToObjMap(obj);
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return mapBean;
	}
	
	/**
	 * 解析json串为一个Map
	 * @param json
	 * @return
	 */
	public static MapBean parseToObjMap(JSONObject obj){
		MapBean map = null;
		if(obj != null){
			map = new MapBean();
			Iterator<String> keys = obj.keys();
			while(keys.hasNext())
			{
				String key = keys.next();
				String value = getString(key, obj);
				map.put(key, value);
//				dealData(map, key, value);
			}

//			if (! "".equals(map.get("sns_picurl"))) {
//				String url = map.get("sns_picurl");
//				if (url.startsWith("/")) {
//					url = Urls.HOST + url;
//				}
//				map.setIconurl(url);
//			}
			
			dealData(map);
			
//			Log.i(TAG, "--------iconUrl: " + map.getIconurl());
		}
		return map;
	}
	
//	/**
//	 * 解析json串为一个Map
//	 * @param json
//	 * @return
//	 */
//	public static Object parseToObj(JSONObject obj){
//		
//		if(obj != null){
//			String type = getString(Key.Group.TYPE, obj);
//			if(!StringUtil.isEmpty(type)){
//				int id = getInt(Key.Group.ID, obj);
//				String name = getString(Key.Group.NAME, obj);
//				boolean hasChild = getBoolean(Key.Group.HASCHILD, obj);
//				boolean expanded = getBoolean(Key.Group.EXPAND, obj);
//				return new TreeElement(id, name, hasChild, expanded);
//			}
//			else
//			{
//				MapBean map = new MapBean();
//				Iterator<String> keys = obj.keys();
//				while(keys.hasNext())
//				{
//					String key = keys.next();
//					String value = getString(key, obj);
//					map.put(key, value);
//					dealData(map, key, value);
//				}
//				
//				if (! "".equals(map.get("sns_picurl"))) {
//					String url = map.get("sns_picurl");
//					if (url.startsWith("/")) {
//						url = Urls.HOST + url;
//					}
//					map.setIconurl(url);
//				}
//				return map;
//			}
//		}
//		return null;
//	}
	
	
	
	/**
	 * 解析json串为一个List<Map>
	 * @param json
	 * @return
	 * @throws JSONException 
	 */
	public static List<MapBean> parseToListMap(JSONArray array) throws JSONException{
		List<MapBean> listMap = null;
		int len = array.length();
		listMap = new ArrayList<MapBean>(len * 110 / 100 + 5);
		
		for(int i = 0; i < len; i++){
			listMap.add(parseToObjMap(array.getJSONObject(i)));
		}
		return listMap;
	}
	
		

	/**
	 * 解析json串为一个List<Map>
	 * @param json
	 * @return
	 */
	public static List<MapBean> parseToListMap(String json){
		List<MapBean> listMap = null;
		JSONArray array;
		try {
			array = new JSONArray(json);
			int len = array.length();
			listMap = new ArrayList<MapBean>(len * 110 / 100 + 5);
			
			for(int i = 0; i < len; i++){
				listMap.add(parseToObjMap(array.getJSONObject(i)));
			}
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return listMap;
	}
	
	/**
	 * 解析json串为一个List<Map>
	 * @param json
	 * @return
	 */
	public static List<Object> parseToListObject(String json){
		List<Object> listMap = null;
		JSONArray array;
		try {
			array = new JSONArray(json);
			int len = array.length();
			listMap = new ArrayList<Object>(len * 110 / 100 + 5);
			
			for(int i = 0; i < len; i++){
				listMap.add(parseToObjMap(array.getJSONObject(i)));
			}
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return listMap;
	}
	
	/**
	 * 解析json串为一个List<Map>
	 * @param json
	 * @return
	 */
	public static List<Object> parseToListObject(JSONArray array){
		List<Object> listMap = null;
		try {
			int len = array.length();
			listMap = new ArrayList<Object>(len * 110 / 100 + 5);
			
			for(int i = 0; i < len; i++){
				listMap.add(parseToObjMap(array.getJSONObject(i)));
			}
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return listMap;
	}
	
	/**
	 * 解析json串为一个List<List<Map>>
	 * @param json
	 * @return
	 */
	public static List<Object> parseToListOfListObject(String json){
		List<Object> listMap = null;
		JSONArray array;
		try {
			array = new JSONArray(json);
			int len = array.length();
			listMap = new ArrayList<Object>(len * 110 / 100 + 5);
			
			for(int i = 0; i < len; i++){
				listMap.add(parseToListObject(array.getJSONArray(i)));
			}
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return listMap;
	}
	
	/**
	 * 从JSON对象中解析字符串
	 * @param key
	 * @param obj
	 * @return
	 */
	public static String getString(String key, JSONObject obj)
	{
		try {
			return obj.getString(key);
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return "";
	}
	
	/**
	 * 从JSON对象中解析boolean值
	 * @param key
	 * @param obj
	 * @return
	 */
	public static boolean getBoolean(String key, JSONObject obj)
	{
		try {
			return obj.getBoolean(key);
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return false;
	}
	
	/**
	 * 从JSON对象中解析int值
	 * @param key
	 * @param obj
	 * @return
	 */
	public static int getInt(String key, JSONObject obj)
	{
		try {
			return obj.getInt(key);
		} catch (JSONException e) {
			Log.i(TAG, e.getMessage());
		}
		return 0;
	}
	
	private static void dealData(MapBean map) {
		if(map == null)
			return ; 
		boolean suc = dealValue(map, "sns_picurl");
		if(!suc)
			suc = dealValue(map, "IMAGEURL");
		if(!suc)
			suc = dealValue(map, "ICON");
		if(!suc)
			suc = dealValue(map, "PIC");
	}
	
	private static boolean dealValue(MapBean map, String key) {
		String value = map.get(key);
		if(!StringUtil.isEmpty(value)) {
			if(!value.startsWith("http"))
			{
				if(value.startsWith("/"))
					value = HOST + value;
				else
					value = HOST + "/" + value;
			}
			else{
				
			}
			return true;
		}
		else
			return false;
	}
	public static final String HOST = "http://familyday.com.cn";
	
//	public static boolean match(String str) {
//		Pattern p = Pattern.compile("l\\d+");
//		Matcher m = p.matcher(str);
//		return m.matches();
//	}
}
